/************************************************************************/
/* Game                                                                 */
/************************************************************************/
#include "Game/Factories/TowerFactory.h"

namespace TD_Game {

	BaseTower * TowerFactory::createBaseTower(towerTypes towerType, unsigned int g_ID, const Coord2D & turretPosition) {
		switch(towerType) {
			case ancientTower: 
				//return(new AncientTower(g_ID, turretPosition));
			break;

			case flowerTower_lvl1:
			case flowerTower_lvl2:
			case flowerTower_lvl3:
			case flowerTower_lvl4:
			case flowerTower_lvl5:
			case flowerTower_lvl6:
				return(new FlowerTower(g_ID, turretPosition));
			break;

			case shyguyTower_lvl1:
			case shyguyTower_lvl2:
			case shyguyTower_lvl3:
			case shyguyTower_lvl4:
			case shyguyTower_lvl5:
			case shyguyTower_lvl6:
				return(new ShyguyTower(g_ID, turretPosition));
			break;

			case magikoopaTower_lvl1:
			case magikoopaTower_lvl2:
			case magikoopaTower_lvl3:
			case magikoopaTower_lvl4:
			case magikoopaTower_lvl5:
			case magikoopaTower_lvl6:
				return(new MagikoopaTower(g_ID, turretPosition));
			break;

			case lakituTower_lvl1:
			case lakituTower_lvl2:
			case lakituTower_lvl3:
			case lakituTower_lvl4:
			case lakituTower_lvl5:
			case lakituTower_lvl6:
				return(new LakituTower(g_ID, turretPosition));
			break;

			case snifitTower_lvl1:
			case snifitTower_lvl2:
			case snifitTower_lvl3:
			case snifitTower_lvl4:
			case snifitTower_lvl5:
			case snifitTower_lvl6:
				return(new SnifitTower(g_ID, turretPosition));
			break;


		}
		return(NULL);
	}

	const BaseTower * TowerFactory::getBaseTowerReference(towerTypes towerType) {
		switch(towerType) {

			case flowerTower_lvl1:
			case flowerTower_lvl2:
			case flowerTower_lvl3:
				return(FlowerTower::getStaticReference());
				break;

			case shyguyTower_lvl1:
			case shyguyTower_lvl2:
			case shyguyTower_lvl3:
				return(ShyguyTower::getStaticReference());
				break;

			case magikoopaTower_lvl1:
			case magikoopaTower_lvl2:
			case magikoopaTower_lvl3:
				return(MagikoopaTower::getStaticReference());
				break;

			case lakituTower_lvl1:
			case lakituTower_lvl2:
			case lakituTower_lvl3:
				return(LakituTower::getStaticReference());
				break;
			
			case snifitTower_lvl1:
			case snifitTower_lvl2:
			case snifitTower_lvl3:
			case snifitTower_lvl4:
			case snifitTower_lvl5:
			case snifitTower_lvl6:
				return(SnifitTower::getStaticReference());
			break;

		}
		return(NULL);
	}		
}
